package com.cskaoyan.market.service;

import com.cskaoyan.market.db.domain.MarketUser;
import com.cskaoyan.market.db.domain.MarketUserExample;
import com.cskaoyan.market.db.mapper.MarketUserMapper;
import com.cskaoyan.market.util.MybatisUtils;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @Author 远志 zhangsong@cskaoyan.onaliyun.com
 * @Date 2024/6/17 15:46
 * @Version 1.0
 */
public class AdminUserServiceImpl implements AdminUserService {
    @Override
    public List<MarketUser> list(String page, String limit, String sort, String order, String username, String mobile) {
        SqlSession session = MybatisUtils.getSession();
        MarketUserMapper marketUserMapper = session.getMapper(MarketUserMapper.class);
        MarketUserExample marketUserExample = new MarketUserExample();
        MarketUserExample.Criteria criteria = marketUserExample.createCriteria();
        // page limit 分别代表当前页以及当前页展示的数据量 是用来进行分页的
        //sort order 是用来进行排序输出的
        //username mobile是用来去筛选过滤数据的，构造where条件的
        if (!StringUtils.isEmpty(username)) {
            criteria.andUsernameLike("%" + username + "%");
        }
        if (!StringUtils.isEmpty(mobile)) {
            criteria.andMobileLike("%" + mobile + "%");
        }

        //这个地方有sql注入的风险
        marketUserExample.setOrderByClause(sort + " " + order);


        //关于分页，可以在当前这次查询的sql语句后面拼接 limit xxx offset xxx,但是这个问题在于如果添加了这个设置之后，后续永远都会分页
        //如果希望某个场景分页，某些场景不分页，很难实现
        //有没有一种方式，设置一个开关，开启就是分页，不开启就是不分页  pagehelper思想理念：原理优点类似于filter拦截
        //我们编写好的sql语句是否需要借助于客户端传输到数据库服务器去解析、编译，能否在编译之前，在sql语句的末尾追加行limit xxx offset xx
        // //设置这一行代码看就是分页，不设置这一行代码就是不分页
        //使用分页插件，不仅可以帮助我们去查询指定页的数据，还可以帮助我们统计总条目数、总页数等信息，最后会将这些数据封装在Page对象中
        //由于page对象继承自ArrayList类型，所以使用List<Object>来接收，不会有任何问题
        PageHelper.startPage(Integer.parseInt(page), Integer.parseInt(limit));
        List<MarketUser> marketUsers = marketUserMapper.selectByExample(marketUserExample);
        session.close();
        return marketUsers;
    }

    @Override
    public Integer update(MarketUser marketUser) {
        SqlSession session = MybatisUtils.getSession();
        MarketUserMapper marketUserMapper = session.getMapper(MarketUserMapper.class);
        int updateNum = marketUserMapper.updateByPrimaryKeySelective(marketUser);
        session.commit();
        session.close();
        return updateNum;
    }

    @Override
    public MarketUser detail(final String id) {
        SqlSession session = MybatisUtils.getSession();
        MarketUserMapper marketUserMapper = session.getMapper(MarketUserMapper.class);
        MarketUser marketUser = marketUserMapper.selectByPrimaryKey(Integer.parseInt(id));
        session.commit();
        session.close();
        return marketUser;
    }


}
